﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;

namespace RTSoft.Modules
{
    class ChangeNumberToText
    {
        private static double soTien = 0;

        private static StringBuilder docRa;
        public static string Doc
        {
            get { return DocSoTien(); }
        }

        public static double Tien
        {
            get { return soTien; }
            set { soTien = value; }
        }

        public static string DocSoTien()
        {
            docRa = new StringBuilder();
            string strTien = null;
            if (soTien.ToString().IndexOf(".") > 0)
            {
                strTien = soTien.ToString().Substring(0, soTien.ToString().IndexOf("."));
            }
            else
            {
                strTien = soTien.ToString();
            }
            string subTien = string.Empty;
            strTien = ThemSoKhong(strTien);
            process(ref strTien, ref subTien, ref docRa, "", 3);
            process(ref strTien, ref subTien, ref docRa, "ngàn", 6);
            process(ref strTien, ref subTien, ref docRa, "triệu", 9);
            process(ref strTien, ref subTien, ref docRa, "tỷ", 12);
            process(ref strTien, ref subTien, ref docRa, "ngàn", 15);
            process(ref strTien, ref subTien, ref docRa, "triệu", 18);
            process(ref strTien, ref subTien, ref docRa, "tỷ", 21);
            process(ref strTien, ref subTien, ref docRa, "ngàn", 24);
            process(ref strTien, ref subTien, ref docRa, "triệu", 27);
            process(ref strTien, ref subTien, ref docRa, "tỷ", 30);
            process(ref strTien, ref subTien, ref docRa, "ngàn", 33);
            process(ref strTien, ref subTien, ref docRa, "triệu", 36);
            process(ref strTien, ref subTien, ref docRa, "tỷ", 39);
            return docRa.ToString();
        }


        private static void process(ref string strTien, ref string subTien, ref StringBuilder docRa, string dv, int i)
        {
            try
            {
                strTien.Substring(strTien.Length - i, 3);
                subTien = strTien.Substring(strTien.Length - i, 3);
                if (subTien.IndexOf("000") != 0)
                {
                    docRa.Insert(0, DocTien(subTien) + " " + dv + " ");
                    strTien.Substring(strTien.Length - i - 3, 3);
                    try
                    {
                        strTien.Substring(strTien.Length - i - 3, 3);
                        if (subTien.IndexOf("00") == 0)
                        {
                            docRa.Insert(0, "không trăm lẽ ");
                        }
                        else
                        {
                            if (subTien.IndexOf("0") == 0)
                            {
                                docRa.Insert(0, "không trăm ");
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        Library.ShowMessage(ex.ToString());
                    }
                }

            }
            catch (Exception ex)
            {
                Library.ShowMessage(ex.ToString());
            }

        }

        private static string ThemSoKhong(string tien)
        {
            while (tien.Length % 3 != 0)
            {
                tien = "0" + tien;
            }
            return tien;
        }

        private static object DocTien(string tien)
        {

            if (tien.IndexOf("000") == 0)
            {
                return "";
            }
            else
            {
                if (tien.IndexOf("00") == 0)
                {
                    return DocDonVi(tien.Substring(2, 1));
                }
                else
                {
                    if (tien.IndexOf("0") == 0)
                    {
                        return DocChuc(tien.Substring(1, 2));
                    }
                    else
                    {
                        return DocTram(tien);
                    }
                }
            }
        }



        private static string DocDonVi(string tien)
        {

            string chu = string.Empty;
            switch (tien)
            {

                case "1":
                    chu = "một";

                    break;
                case "2":
                    chu = "hai";

                    break;
                case "3":
                    chu = "ba";

                    break;
                case "4":
                    chu = "bốn";

                    break;
                case "5":
                    chu = "năm";

                    break;
                case "6":
                    chu = "sáu";

                    break;
                case "7":
                    chu = "bảy";

                    break;
                case "8":
                    chu = "tám";

                    break;
                case "9":
                    chu = "chín";
                    break;
            }
            return chu;
        }

        private static string DocChuc(string tien)
        {
            string t1 = tien.Substring(0, 1);
            string t2 = tien.Substring(1, 1);
            string reValue = "";
            if (tien == "00")
            {
                return "";
            }
            else
            {
                if (tien == "0")
                {
                    Debug.WriteLine("t2 la:" + t2);
                    reValue = "lẽ " + DocDonVi(t2);
                }
                else
                {
                    if (tien == "10")
                    {
                        return "mười";
                    }
                    if (t1 == "1")
                    {
                        reValue = "mười";
                    }
                    else
                    {
                        reValue = DocDonVi(t1);
                    }
                    if (Convert.ToInt32(t1) != 1 & Convert.ToInt32(t2) == 1)
                    {
                        reValue = reValue + " mươi mốt";
                    }
                    else
                    {
                        if (t2 == "5" & t1 != "1")
                        {
                            reValue = reValue + " mươi lăm";
                        }
                        else
                        {
                            if (t2 == "5" & t1 == "1")
                            {
                                reValue = reValue + " lăm";
                            }
                            else
                            {
                                if (t1 == "1" & t2 != "5")
                                {
                                    reValue = reValue + " " + DocDonVi(t2);
                                }
                                else
                                {
                                    reValue = reValue + " mươi " + DocDonVi(t2);
                                }
                            }
                        }
                    }
                }
            }
            return reValue;
        }

        private static string DocTram(string tien)
        {
            string t1 = tien.Substring(0, 1);
            string t2 = tien.Substring(1, 2);
            string reValue = "";
            reValue += DocDonVi(t1);
            reValue += " trăm ";
            reValue += DocChuc(t2);
            return reValue;
        }
    }
}
